<?php

/**
 * 
 */


class InformesElectricidadController extends Sgit_Controller_Action
{

    protected $_checkZona = true;



    protected $_main_model = 'InformeElectricidadMensualProyecto';


    /**
     * ElectricidadController::_comun()
     * 
     * elementos comunes para imputacion,facturacio,exceso,margen
     * 
     */

    function _comun($values_extra='',$nowhere='')
    {



        if (!$this->getRequest()->isPost())
        {
            $imp = new Application_Model_InformeElectricidadMensualDatacenter();
            $last = $imp->getLastImputacion($this->_idZona);
            if($last){
                $this->setParam('mes', $last['mes']);
                $this->setParam('anio', $last['anio']);
            }
          
        } else
        {
            $where['mes = ?'] = $this->_getParam('mes');
            $where['anio = ?'] = $this->_getParam('anio');
            $where['id_zona = ?'] = $this->_idZona;
            unset($where);
        }
        


        $this->is_datacenter = Sgit_Validate_isDatacenter::isValid();

        $filtros = new Sgit_Form_Filtros();

        $f_mes = new Sgit_Form_Element_Select_Mes('mes');
        $f_mes->setLabel('Mes');
        $filtros->addFormSelect($f_mes);

        $f_anio = new Sgit_Form_Element_Select_Year('anio');
        $f_anio->setLabel('Año');
        $filtros->addFormSelect($f_anio);

        $proyecto = new Sgit_Form_Element_Select_Proyectos('id_proyecto');
        $proyecto->setLabel('Proyecto');
        $filtros->addFormSelect($proyecto);

        $pep = new Zend_Form_Element_Text('orden');
        $pep->setLabel('PEP');
        $filtros->addFormSelect($pep);

        $usuario = new Sgit_Form_Element_Select_Usuarios('id_dir');
        $usuario->setLabel('JP');
        $filtros->addFormSelect($usuario);


        $filtros->addExcel();
        $filtros->addPdf();
        $filtros->myRender();


        $values = $this->_getFiltrosValues($filtros);
        $values['id_zona'] = $this->_idZona;
        
        if ($values_extra) $values=array_merge((array)$values_extra,(array)$values);


        return $this->_model->default->getListadoImputacion($values);
        
        

    }


    public function imputacionAction()
    {

        $rows = $this->_comun();

        foreach ($rows as $k => $v)
        {
            if (!$this->is_datacenter && !$v['publicado'])
            {
                continue;
            }
            $filas[] = $v;
        }

        $this->view->rows = $filas;
        $this->view->suma = Sgit_Util_Suma::run($this->view->rows, array('consumo_it', 'consumo_imputable', 'imputacion'));

        $this->_pdfSubTitle = $this->zona . " " . Sgit_Util_Meses::run($this->_getParam('mes')) . " " . $this->_getParam('anio');
        $this->_export($this->view->rows);
        
        $xml = $this->_getXml($this->_actionName);
        $this->view->columnas = $xml['columnas'];

    }


    public function facturacionAction()
    {
        $rows = $this->_comun();

        foreach ($rows as $k => $v)
        {
            if (!$this->is_datacenter && !$v['publicado'])
            {
                continue;
            }
            
            
            if(!is_numeric($v['tipo_facturacion'])){
                continue;
            }
            
            
            if($v['tipo_facturacion']==3){//tarifa plana
                $v['precio_kwh_aplicado']=null;
                $v['coeficiente_facturacion']=null;
                $v['consumo_facturable']=null;
                $v['importe_gestion']=null;
                $v['facturacion_consumo']=null;
            }
            
            if($v['tipo_facturacion']==1){
                $v['tarifa_plana']=null;
                $v['precio_kwh_aplicado']=null;
                $v['coeficiente_facturacion']=null;
                $v['consumo_facturable']=null;
                $v['importe_gestion']=null;
                $v['facturacion_consumo']=null;
                $v['facturacion']=null;
            }
            
            
            
            $filas[] = $v;
        }

        $this->view->rows = $filas;
        $this->view->suma = Sgit_Util_Suma::run($this->view->rows, array('consumo_it', 'consumo_facturable', 'facturacion_consumo', 'tarifa_plana', 'importe_gestion', 'facturacion'));
        $this->view->suma['proyecto'] = 'Total';

        $this->_pdfSubTitle = $this->zona . " " . Sgit_Util_Meses::run($this->_getParam('mes')) . " " . $this->_getParam('anio');
        $this->_export($this->view->rows, $this->_actionName);
        
        $xml = $this->_getXml($this->_actionName);
        $this->view->columnas = $xml['columnas'];
    }


    public function margenAction()
    {
        $rows = $this->_comun();

        foreach ($rows as $k => $v)
        {
            if (!$this->is_datacenter && !$v['publicado'])
            {
                continue;
            }

            if(!$v['imputacion_exceso'])$v['imputacion_exceso']=null;
            
          
            

            $filas[] = $v;
        }

        $this->view->rows = $filas;
        $this->view->suma = Sgit_Util_Suma::run($this->view->rows, array('consumo_it', 'consumo_imputable', 'imputacion', 'imputacion_exceso', 'imputacion_total', 'consumo_facturable', 'facturacion', 'facturacion_exceso', 'facturacion_total'));
        $this->view->suma['proyecto'] = 'Total';


        $this->_pdfSubTitle = $this->zona . " " . Sgit_Util_Meses::run($this->_getParam('mes')) . " " . $this->_getParam('anio');
        $this->_export($this->view->rows);

        $xml = $this->_getXml($this->_actionName);

        $this->view->columnas = $xml['columnas'];


    }


    public function excesoAction()
    {
        
        $values_extra['modalidad_disponibilidad']=1;
        $rows = $this->_comun($values_extra);

        foreach ($rows as $k => $v)
        {
            if (!$this->is_datacenter && !$v['publicado'])
            {
                continue;
            }
            
            if(!$v['tipo_disponibilidad']){
               continue;
            }
            
            if($v['tipo_disponibilidad']==2){
                $v['disponibilidad_wrack_consumida']=$v['disponibilidad_wm2_consumida']*3;
                $v['disponibilidad_wrack_contratada']=$v['disponibilidad_wm2_contratada']*3;
            }
            $v['precio_tramo']= $v['imputacion_exceso']/($v['superficie']*$v['tramos']);
            if(!$v['imputacion_exceso'])$v['imputacion_exceso']=null;
            
            
            $filas[] = $v;
        }

        $this->view->rows = $filas;
        $this->view->suma = Sgit_Util_Suma::run($this->view->rows, array('potencia_actual', 'superficie', 'imputacion_exceso'));
        $this->view->suma['proyecto'] = 'Total';


        $this->_pdfSubTitle = $this->zona . " " . Sgit_Util_Meses::run($this->_getParam('mes')) . " " . $this->_getParam('anio');
        $this->_export($this->view->rows);
        $xml = $this->_getXml($this->_actionName);
        $this->view->columnas = $xml['columnas'];

    }
    
    
    
    
    public function disponibilidadAction()
    {
        $values_extra['modalidad_disponibilidad']=2;
        $values_extra['tipo_disponibilidad']=1;
        $values_extra['tipo_facturacion']=7;


        $rows = $this->_comun($values_extra);


        foreach ($rows as $k => $v)
        {
            if (!$this->is_datacenter && !$v['publicado'])
            {
                continue;
            }
            

            
            $filas[] = $v;
        }


        $this->view->rows = $filas;
        $this->view->suma = Sgit_Util_Suma::run($this->view->rows, array('potencia_actual', 'superficie', 'imputacion_disponibilidad_contratada','imputacion_disponibilidad_consumida'));
        $this->view->suma['proyecto'] = 'Total';


        $this->_pdfSubTitle = $this->zona . " " . Sgit_Util_Meses::run($this->_getParam('mes')) . " " . $this->_getParam('anio');
        $this->_export($this->view->rows);
        $xml = $this->_getXml($this->_actionName);
        $this->view->columnas = $xml['columnas'];
        

    }  


    public function excesoPublicoAction()
    {
        $this->_forward('exceso');
    }
    public function disponibilidadPublicoAction()
    {
        $this->_forward('disponibilidad');
    }
    
    public function imputacionPublicoAction()
    {
        $this->_forward('imputacion');
    }
    public function facturacionPublicoAction()
    {
        $this->_forward('facturacion');
    }

    public function margenPublicoAction()
    {
        $this->_forward('margen');
    }


    protected function detalleAction()
    {

        $this->_loadModel('Contadores');
        $this->_loadModel('Proyectos');

        $values['id_zona'] = $this->_idZona;
        $values['mes'] = $this->_getParam('mes');
        $values['anio'] = $this->_getParam('anio');
        $values['id_proyecto'] = $this->_getParam('id_proyecto');


        $this->view->proyecto = $this->_model->Proyectos->getOne('nombre', $values['id_proyecto']);



        $rows = $this->_model->default->getListadoImputacion($values);
     

    
        $imputacion = $rows[0];

        $contadores = $this->_model->Contadores->getContadoresDetalleFacturacion($values);



        foreach ($contadores as & $v)
        {
            $parte = $v['consumo'] / $imputacion['consumo_it'];


            $v['fecha'] = $imputacion['fecha'];
            $v['con_numero'] = $v['con_numero'];
            $v['id_contador'] = $v['id'];
            $v['con_name'] = $v['con_name'];
            $v['id_proyecto'] = $imputacion['id_proyecto'];
            $v['consumo_it'] = $v['consumo'];
            $v['coeficiente_facturacion'] = $imputacion['coeficiente_facturacion'];
            $v['consumo_facturable'] = $v['consumo_it'] * $imputacion['coeficiente_facturacion'];
            $v['precio_kwh_aplicado'] = $imputacion['precio_kwh_aplicado'];
            $v['facturacion_consumo'] = $imputacion['precio_kwh_aplicado'] * $imputacion['coeficiente_facturacion'] * $v['consumo'];
            $v['importe_gestion'] = $imputacion['importe_gestion'] / count($contadores);
            $v['facturacion'] = $imputacion['facturacion'] * $parte;
            $v['tarifa_plana'] = $imputacion['tarifa_plana'] * $parte;
            $v['text_tipo_facturacion'] = $imputacion['text_tipo_facturacion'];

        }


        $this->view->rows = $contadores;
        $this->view->suma = Sgit_Util_Suma::run($this->view->rows, array('consumo_it', 'consumo_facturable', 'facturacion_consumo', 'importe_gestion', 'facturacion','tarifa_plana'));
        $this->view->suma['proyecto'] = 'Total';

        $this->_pdfSubTitle = $this->view->proyecto . " " . $this->zona . " " . Sgit_Util_Meses::run($this->_getParam('mes')) . " " . $this->_getParam('anio');
        $this->_export($this->view->rows, $this->_actionName);
    }



    public function resumenAction()
    {
        
        if (!$this->_getParam('anio'))
        {
            $this->setParam('anio', date('Y'));
        }


        $filtros = new Sgit_Form_Filtros();

        $f_mes = new Sgit_Form_Element_Select_Mes('mes');
        $f_mes->setLabel('Mes');
        $filtros->addFormSelect($f_mes);

        $f_anio = new Sgit_Form_Element_Select_Year('anio');
        $f_anio->setLabel('Año');
        $filtros->addFormSelect($f_anio);

        $filtros->addExcel();
        $filtros->addPdf();
        $filtros->myRender();

        $values = $this->_getFiltrosValues($filtros);
        $values['id_zona'] = $this->_idZona;



        $imp = new Application_Model_InformeElectricidadMensualDatacenter();
        
        $this->view->rows = $imp->getImputacionResumen($values);


        $this->view->suma = Sgit_Util_Suma::run($this->view->rows, array('consumo_imputable', 'consumo_datacenter', 'consumo_it', 'consumo_servicios', 'potencia_total', 'potencia_it', 'potencia_servicios', 'potencia_datacenter', 'facturado_compania', 'imputacion', 'facturacion'));

        $this->view->suma['ratio_reventa'] = 100 * (($this->view->suma['facturacion'] / $this->view->suma['facturado_compania']) - 1);
        $this->view->suma['pue'] = $this->view->suma['potencia_datacenter'] / $this->view->suma['potencia_it'];


        $this->view->suma['proyecto'] = 'Total';


        $this->_pdfSubTitle = $this->zona . " " . Sgit_Util_Meses::run($this->_getParam('mes')) . " " . $this->_getParam('anio');
        $this->_export($this->view->rows);

        $xml = $this->_getXml($this->_actionName);

        $this->view->columnas = $xml['columnas'];

    }









    public function testAction()
    {

        $this->setParam('diff', 12);
        if (!$this->getRequest()->isPost())
        {
            $imp = new Application_Model_InformeElectricidadMensualDatacenter();
            $last = $imp->getLastImputacion($this->_idZona);
            if($last){
                $this->setParam('mes', $last['mes']);
                $this->setParam('anio', $last['anio']);
            }
         
        } else
        {
            $where['mes = ?'] = $this->_getParam('mes');
            $where['anio = ?'] = $this->_getParam('anio');
            $where['id_zona = ?'] = $this->_idZona;
            unset($where);
        }


        $filtros = new Sgit_Form_Filtros();

        $f_anio = new Sgit_Form_Element_Select_Year('anio');
        $filtros->addFormSelect($f_anio);

        $f_mes = new Sgit_Form_Element_Select_Mes('mes');
        $filtros->addFormSelect($f_mes);

        $f_diff = new Zend_Form_Element_Text('diff');
        $f_diff->setLabel('Diff %');
        $filtros->addFormSelect($f_diff);


        $values = $this->_getFiltrosValues($filtros);
        $filtros->myRender();

        $this->view->diff = $diff;

    

        $mes=$this->_getParam('mes');
        $anio=$this->_getParam('anio');
        $diff=$this->_getParam('diff');


        $fecha = new Zend_Date();
        $fecha->setDay(1)->set($mes, Zend_Date::MONTH)->set($anio, Zend_Date::YEAR)->sub(1, Zend_Date::MONTH);

        $filas1 = $this->_model->default->getImputacionFecha($anio, $mes, $this->_idZona);
        $filas2 = $this->_model->default->getImputacionFecha($fecha->get('yyyy'), $fecha->get(Zend_Date::MONTH_SHORT), $this->_idZona);

        $f1=new Zend_Date(mktime(1, 1, 1, $mes-1, 1, $anio));
        $f2=new Zend_Date(mktime(1, 1, 1, $mes-2, 1, $anio));
        

        foreach ($filas1 as $k => $v)
        {
            
            
            $rows[$k]['nombre'] = $v['nombre'];

            $v['potencia']=1000*Sgit_Util_Potencia::run($v['consumo_it'], $f1);
            $filas2[$k]['potencia']=1000*Sgit_Util_Potencia::run($filas2[$k]['consumo_it'], $f2);
            
            $rows[$k]['potencia'] = $this->fila($v, $filas2[$k], 'potencia', $diff);
            $rows[$k]['consumo_it'] = $this->fila($v, $filas2[$k], 'consumo_it', $diff);
            
            $rows[$k]['facturacion'] = $this->fila($v, $filas2[$k], 'facturacion', $diff);
            $rows[$k]['coeficiente_facturacion'] = $this->fila($v, $filas2[$k], 'coeficiente_facturacion', 0, 1);
            $rows[$k]['coeficiente_repercusion_aplicado'] = $this->fila($v, $filas2[$k], 'coeficiente_repercusion_aplicado', 0, 2);
            
 
            $rows[$k]['consumo_it'] = $this->fila($v, $filas2[$k], 'consumo_it', $diff);
            $rows[$k]['precio_kwh_aplicado'] = $this->fila($v, $filas2[$k], 'precio_kwh_aplicado', $diff, 2);
            $rows[$k]['imputacion'] = $this->fila($v, $filas2[$k], 'imputacion', $diff);
            $rows[$k]['importe'] = $this->fila($v, $filas2[$k], 'importe', $diff);
            $rows[$k]['disponibilidad'] = $this->fila($v, $filas2[$k], 'disponibilidad', $diff, 2);
            $rows[$k]['superficie'] = $this->fila($v, $filas2[$k], 'superficie', $diff, 2);
            $rows[$k]['disponibilidad_wm2_consumida'] = $this->fila($v, $filas2[$k], 'disponibilidad_wm2_consumida', $diff);
            $rows[$k]['imputacion_exceso'] = $this->fila($v, $filas2[$k], 'imputacion_exceso', $diff);
            $rows[$k]['modalidad_disponibilidad'] = $this->fila($v, $filas2[$k], 'modalidad_disponibilidad', 0);
        }
        $this->view->rows = $rows;
    }


    function fila($v, $filas2, $key, $diff = 12, $dec = 0)
    {
        $row['status'] = $this->testDiff($v[$key], $filas2[$key], $diff);
        $row['text'] = $this->view->numES($v[$key], $dec) . ' <br> ' . $this->view->numES($filas2[$key], $dec);
        return $row;

    }


    /**
     * ImputacionTestController::testDiff()
     *
     * @param mixed $v1
     * @param mixed $v2
     * @return
     */
    function testDiff($v1, $v2, $diff = 12)
    {

        if ($v2 == 0 && $v1 > 0)
        {
            return false;
        }

        $value = $v1 / $v2;
        if (is_bool($value))
        {
            return true;
        } else
        {
            if ($value < 1)
            {
                $porcentaje = 100 * (1 - $value);
            } else
            {
                $porcentaje = 100 * ($value - 1);
            }

            if ($porcentaje <= $diff)
            {
                return true;
            } else
            {
                return false;
            }
        }


    }


}
